#include <stdio.h>

/*
 * 二分查找： binary search  折半查找 half search
 * 使用二分查找的前提：有序
 * 对于一个升序数组而言，步骤：
 * （1）定义两个指针（两个指向数组下标值的变量）L,H，分别指向数组的最低位和最高位
 *  （2）中间值得索引值mid =(L+H)/2;
 *  (3)进行比较
 *     假设查找值value,数组arr
 *     value > arr[mid]  移动L到中间值的后一个位置 M+1
 *     value < arr[mid]  移动H到中间值的前一个位置 M-1
 *     value == arr[mid] 找到
 *  （4）搜索范围全部搜索后，都没有找到
 *      不存在
 * */
/*函数名：binarysearch()
 * 输入：待查找数值value,有序数列arr
 * 输出：找到 下标值  没找到 -1
 * */
int binarySearch(int value,int arr[],int length){
    int low=0;
    int high=length-1;
    int mid;
    while (low<=high){
        mid =(low+high)/2;
        if(value>arr[mid])
            low =mid+1;
        else if(value < arr[mid])
            high = mid -1;
        else
            return mid;
    }
    return -1;
}

int main() {
    int arr[10]={1,2,3,4,5,6,7,8,9,10};
    int value =7;
    int length =10;
    int tmp = binarySearch(value,arr,length);
    if(tmp!=-1){
        printf("值%d的索引值是%d\n",value,tmp);
    } else
    {
        printf("值%没找到\n",value);
    }
   // printf("Hello, World!\n");
    return 0;
}
